home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload Trio 2 / Shareware Overload Trio Volume 2 (Chestnut CD-ROM).ISO / dir43 / pxengn13.zip / PXENGIN2.RLZ next >
Text File  |  1992-02-10  |  16KB  |  547 lines

  1. '**********************************************************************
  2. '    PxEngin2.RLZ   Version:  1.3        
  3. '    Realizer high-level Paradox Engine interface.
  4. '
  5. '    Paradox(TM)  Engine Interface for Realizer (TM).
  6. '    Paradox is a trademark of Borland International.
  7. '    REALIZER is a trademark of Within Technologies, Inc.
  8. '
  9. '    Copyright ⌐ 1991, 1992 Within Technologies, Inc.
  10. '    All rights reserved.
  11. '***********************************************************************
  12.  
  13. IF NOT(QVar(%%PXEngine, _Defined)) THEN
  14.     PDX_PXSHARED            = 2                ' Open all tables with PREVENT FULL LOCK.
  15.  
  16.     ' Used in PXSrchFld, PXSrchKey.
  17.     PDX_SEARCHFIRST            = 0                ' Search from beginning of table.
  18.     PDX_SEARCHNEXT            = 1                ' Search from next record in table.
  19.     PDX_CLOSESTRECORD        = 2                ' (modifier) goto 'nearest' record if  no match found (ordered fields only).
  20.  
  21.     PDX_PXSUCCESS                = 0  
  22.     PDX_PXERR_ENDOFTABLE        = 101            ' End of table.
  23.     PDX_PXERR_STARTOFTABLE    = 102            ' Start of table.
  24.     PDX_PXERR_RECNOTFOUND    = 89                ' Record was not found.
  25.  
  26.     EXTERNAL "PXEngWin.DLL" FUNC PXWinInit (POINTER clientName, INTEGER ShareMode) AS INTEGER ALIAS 84
  27.     EXTERNAL "PXEngWin.DLL" FUNC PXExit AS INTEGER ALIAS 4
  28.     EXTERNAL "PXEngWin.DLL" FUNC PXGetDefaults (POINTER swapSize, POINTER maxTables, POINTER maxRecBufs, POINTER MaxLocks, POINTER maxFiles, POINTER sortTable) AS INTEGER ALIAS 6
  29.     EXTERNAL "PXEngWin.DLL" FUNC PXTblOpen (POINTER tblName, POINTER ptblHandle, INTEGER indexID, INTEGER saveEveryChange) AS INTEGER ALIAS 8
  30.     EXTERNAL "PXEngWin.DLL" FUNC PXTblClose (WORD tblHandle) AS INTEGER ALIAS 9
  31.     EXTERNAL "PXEngWin.DLL" FUNC PXRecInsert (WORD tblHandle, WORD recHandle) AS INTEGER ALIAS 17
  32.     EXTERNAL "PXEngWin.DLL" FUNC PXRecUpdate (WORD tblHandle, WORD recHandle) AS INTEGER ALIAS 18
  33.     EXTERNAL "PXEngWin.DLL" FUNC PXRecDelete (WORD tblHandle) AS INTEGER ALIAS 41
  34.     EXTERNAL "PXEngWin.DLL" FUNC PXRecBufOpen (WORD tblHandle, POINTER precHandle) AS INTEGER ALIAS 19
  35.     EXTERNAL "PXEngWin.DLL" FUNC PXRecBufClose (WORD recHandle) AS INTEGER ALIAS 20
  36.     EXTERNAL "PXEngWin.DLL" FUNC PXRecBufEmpty (WORD recHandle) AS INTEGER ALIAS 21
  37.     EXTERNAL "PXEngWin.DLL" FUNC PXRecGet (WORD tblHandle, WORD recHandle) AS INTEGER ALIAS 23
  38.     EXTERNAL "PXEngWin.DLL" FUNC PXPutShort (WORD recHandle, WORD fldHandle, INTEGER value) AS INTEGER ALIAS 24
  39.     EXTERNAL "PXEngWin.DLL" FUNC PXPutDoub (WORD recHandle, WORD fldHandle, REAL value) AS INTEGER ALIAS 25
  40.     EXTERNAL "PXEngWin.DLL" FUNC PXPutLong (WORD recHandle, WORD fldHandle, LONG value) AS INTEGER ALIAS 26
  41.     EXTERNAL "PXEngWin.DLL" FUNC PXPutAlpha (WORD recHandle, WORD fldHandle, POINTER value) AS INTEGER ALIAS 27
  42.     EXTERNAL "PXEngWin.DLL" FUNC PXPutDate (WORD recHandle, WORD fldHandle, LONG value) AS INTEGER ALIAS 28
  43.     EXTERNAL "PXEngWin.DLL" FUNC PXPutBlank (WORD recHandle, WORD fldHandle) AS INTEGER ALIAS 29
  44.     EXTERNAL "PXEngWin.DLL" FUNC PXGetShort (WORD recHandle, WORD fldHandle, POINTER SValue) AS INTEGER ALIAS 30
  45.     EXTERNAL "PXEngWin.DLL" FUNC PXGetDoub (WORD recHandle, WORD fldHandle, POINTER DValue) AS INTEGER ALIAS 31
  46.     EXTERNAL "PXEngWin.DLL" FUNC PXGetLong (WORD recHandle, WORD fldHandle, POINTER LValue) AS INTEGER ALIAS 32
  47.     EXTERNAL "PXEngWin.DLL" FUNC PXGetAlpha (WORD recHandle, WORD fldHandle, INTEGER bufSize, POINTER dest) AS INTEGER ALIAS 33
  48.     EXTERNAL "PXEngWin.DLL" FUNC PXGetDate (WORD recHandle, WORD fldHandle, POINTER Date) AS INTEGER ALIAS 34
  49.     EXTERNAL "PXEngWin.DLL" FUNC PXFldBlank (WORD recHandle, WORD fldHandle, POINTER Blank) AS INTEGER ALIAS 35
  50.     EXTERNAL "PXEngWin.DLL" FUNC PXRecGoto (WORD tblHandle, LONG recNum) AS INTEGER ALIAS 36
  51.     EXTERNAL "PXEngWin.DLL" FUNC PXRecFirst (WORD tblHandle) AS INTEGER ALIAS 37
  52.     EXTERNAL "PXEngWin.DLL" FUNC PXRecLast (WORD tblHandle) AS INTEGER ALIAS 38
  53.     EXTERNAL "PXEngWin.DLL" FUNC PXRecNext (WORD tblHandle) AS INTEGER ALIAS 39
  54.     EXTERNAL "PXEngWin.DLL" FUNC PXRecPrev (WORD tblHandle) AS INTEGER ALIAS 40
  55.     EXTERNAL "PXEngWin.DLL" FUNC PXDateDecode (LONG date, POINTER mo, POINTER da, POINTER yr) AS INTEGER ALIAS 44
  56.     EXTERNAL "PXEngWin.DLL" FUNC PXDateEncode (INTEGER mo, INTEGER da, INTEGER yr, POINTER pdate) AS INTEGER ALIAS 45
  57.     EXTERNAL "PXEngWin.DLL" FUNC PXSrchFld (WORD tblHandle, WORD recHandle, WORD fldHandle, INTEGER mode) AS INTEGER ALIAS 47
  58.     EXTERNAL "PXEngWin.DLL" FUNC PXTblExist (POINTER tblName, POINTER Exist) AS INTEGER ALIAS 53
  59.     EXTERNAL "PXEngWin.DLL" FUNC PXRecNum (WORD tblHandle, POINTER precnum) AS INTEGER ALIAS 55
  60.     EXTERNAL "PXEngWin.DLL" FUNC PXTblNRecs (WORD tblHandle, POINTER pnRecs) AS INTEGER ALIAS 56
  61.     EXTERNAL "PXEngWin.DLL" FUNC PXRecNFlds (WORD tblHandle, POINTER nFlds) AS INTEGER ALIAS 57
  62.     EXTERNAL "PXEngWin.DLL" FUNC PXFldHandle (WORD tblHandle, POINTER fieldName, POINTER pfldHandle) AS INTEGER ALIAS 59
  63.     EXTERNAL "PXEngWin.DLL" FUNC PXFldType (WORD tblHandle, WORD fldHandle, INTEGER bufSize, POINTER fldType) AS INTEGER ALIAS 60
  64.  
  65.     %%PXEngine = 1
  66. END IF
  67.  
  68.  
  69. %%FALSE = 0
  70. %%TRUE = 1
  71.  
  72. ' General purpose DBInter error number returned error anytime a Paradox error is caught by Error.
  73. PDX_DBInterError = 1000
  74.  
  75. ' Constants for GotoRecord recNumber parameter, any positive number is the actual record number.
  76. PX_LastRecord = -10
  77. PX_FirstRecord = -9
  78. PX_NextRecord = -8
  79. PX_PrevRecord = -7
  80.  
  81. RUN "StdSys"
  82. RUN "StdMsgBx"
  83. RUN "StdStrng"
  84.  
  85. PROC %%MBox(msg)
  86.     LOCAL junk
  87.     junk = MessageBox(msg, "Paradox Error", _MB_Ok)
  88. END PROC
  89.  
  90.  
  91. FUNC %%Error(err)            'Specific and general Paradox error messages.
  92.     SELECT CASE err
  93.         CASE 82
  94.             %%MBox("Paradox Engine already installed !")
  95.         CASE 97
  96.             %%MBox("Duplicate Key or other Key Violation")
  97.         CASE 134
  98.             %%MBox("SHARE must be run prior to running Paradox")
  99.         CASE ELSE
  100.             %%MBox("Unexpected Paradox error: " + NumToStr(err))
  101.     END SELECT
  102.     RETURN (err <> PDX_PXSUCCESS)
  103. END FUNC
  104.  
  105.  
  106. PROC SelectTable(entry)
  107.     %%curTbl = entry
  108.     %%curTblHnd = CVI(Mid$(%%tblHnd, 2 * %%curTbl - 1, 2))
  109.     %%curRecHnd = CVI(Mid$(%%recHnd, 2 * %%curTbl - 1, 2))
  110.     %%curFldType = %%fldType[entry]
  111. END PROC
  112.  
  113.  
  114. FUNC CurrentTable
  115.     RETURN (%%curTbl)
  116. END FUNC
  117.  
  118.  
  119. FUNC ParadoxInit
  120.     LOCAL err, swapSize, maxTables, maxRecBufs, maxLocks, maxFiles, sortTable
  121.  
  122.     err = PXWinInit("RlzCust", PDX_PXSHARED)            ' Initialize Paradox engine.
  123.     IF err  THEN 
  124.         Return (NOT(%%Error(err)))
  125.     END IF
  126.  
  127.     swapSize = String$(2, " ")
  128.     maxTables = String$(2, " ")
  129.     maxRecBufs = String$(2, " ")
  130.     maxLocks = String$(2, " ")
  131.     maxFiles = String$(2, " ")
  132.     sortTable = String$(500, " ")
  133.     err = PXGetDefaults(swapSize, maxTables, maxRecBufs, maxLocks, maxFiles, sortTable)
  134.     IF err THEN
  135.         Return (NOT(%%Error(err)))
  136.     END IF
  137.     %%NumTables = CVI(maxTables)
  138.     IF %%NumTables = 0 THEN
  139.         Return (%%FALSE)
  140.     END IF
  141.  
  142.     %%tblHnd = String$(2 * %%NumTables, 0)
  143.     %%recHnd = String$(2 * %%NumTables, 0)
  144.     %%tblList = String$(%%NumTables, "0")
  145.     %%curTbl = 0
  146.     Return (%%TRUE)
  147. END FUNC
  148.  
  149.  
  150. FUNC ParadoxExit
  151.     LOCAL err
  152.     err = PXExit
  153.     IF err THEN
  154.         Return (NOT(%%Error(err)))
  155.     ELSE
  156.         Return (%%TRUE)
  157.     END IF
  158. END FUNC
  159.  
  160.  
  161. FUNC OpenTable (tbl)
  162.     LOCAL exist, err, tableHandle, recordHandle, numFields, J
  163.  
  164.     ' Does the table exist?
  165.     exist = String$(2, 0)
  166.     err = PXTblExist(tbl, exist)
  167.     IF (err <> PDX_PXSUCCESS) OR NOT(CVI(exist)) THEN
  168.         %%MBox("The table " + tbl + " cannot be found  (" + NumToStr(err) + ").")
  169.         Return (%%FALSE)
  170.     END IF
  171.  
  172.     J = InStr(%%tblList, "0")
  173.     IF J THEN
  174.         %%tblList = SubStr$(%%tblList, "", "X", J, 1)
  175.         %%curTbl = J
  176.     ELSE
  177.         %%MBox("Too many tables are open.")
  178.         RETURN (%%FALSE)
  179.     END IF
  180.  
  181.     tableHandle = String$(2, 0)
  182.     err = PXTblOpen(tbl, tableHandle, 0, 0)
  183.     IF (err <> PDX_PXSUCCESS) THEN
  184.         %%MBox("The table " + tbl + " cannot be openned  (" + NumToStr(err) + ").")
  185.         Return (%%FALSE)
  186.     END IF
  187.  
  188.     %%curTblHnd = CVI(tableHandle)
  189.     %%tblHnd = SubStr$(%%tblHnd, "", tableHandle, 2 * %%curTbl - 1, 2)
  190.     recordHandle = String$(2, 0)
  191.     err = PXRecBufOpen(%%curTblHnd, recordHandle)
  192.     IF err THEN
  193.         RETURN (NOT(%%Error(err)))
  194.     END IF
  195.     %%curRecHnd = CVI(recordHandle)
  196.     %%recHnd = SubStr$(%%recHnd, "", recordHandle, 2 * %%curTbl - 1, 2)
  197.     numFields = String$(2, 0)
  198.     err = PXRecNFlds(%%curTblHnd, numFields)
  199.     IF err <> PDX_PXSUCCESS THEN
  200.         Return (NOT(%%Error(err)))
  201.     END IF
  202.     %%curFldType = String$(CVI(numFields), " ")
  203.     %%fldType[%%curTbl] = %%curFldType
  204.  
  205.     RETURN (%%TRUE)
  206. END FUNC
  207.  
  208.  
  209. FUNC CloseTable
  210.     LOCAL err
  211.     err = PXTblClose(%%curTblHnd)
  212.     IF err THEN
  213.         RETURN (NOT (%%Error(err)))
  214.     END IF
  215.     %%tblList = SubStr$(%%tblList, "", "0", %%curTbl, 1)
  216.     %%fldType[%%curTbl] = ""
  217.     %%curTbl = 0
  218.     %%curTblHnd = 0
  219.     %%curRecHnd = 0
  220.     %%curFldType = ""
  221.     RETURN (%%TRUE)
  222. END FUNC
  223.  
  224.  
  225. FUNC GetRecNumber
  226.     LOCAL recNumber, err
  227.  
  228.     recNumber = String$(2, 0)
  229.     err = PXRecNum(%%curTblHnd, recNumber)
  230.     IF err THEN
  231.         err = %%Error(err)
  232.         RETURN (-1)
  233.     ELSE
  234.         RETURN (CVI(recNumber))
  235.     END IF
  236. END FUNC
  237.  
  238.  
  239. FUNC GotoRecord (recNumber)
  240.     LOCAL err
  241.     SELECT CASE recNumber
  242.     CASE PX_LastRecord
  243.         err = PXRecLast(%%curTblHnd)
  244.     CASE PX_FirstRecord
  245.         err = PXRecFirst(%%curTblHnd)
  246.     CASE PX_NextRecord
  247.         err = PXRecNext(%%curTblHnd)
  248.         IF err = PDX_PXERR_ENDOFTABLE THEN
  249.             RETURN(%%FALSE)
  250.         END IF
  251.     CASE PX_PrevRecord
  252.         err = PXRecPrev(%%curTblHnd)
  253.         IF err = PDX_PXERR_STARTOFTABLE THEN
  254.             RETURN(%%FALSE)
  255.         END IF
  256.     CASE ELSE
  257.         err = PXRecGoto(%%curTblHnd, recNumber)
  258.     END SELECT
  259.     IF err = PDX_PXSUCCESS THEN
  260.         Return (%%TRUE)
  261.     ELSE 
  262.         Return (NOT(%%Error(err)))
  263.     END IF
  264. END FUNC
  265.  
  266. FUNC %%GetFieldHandle (whichField)
  267.     LOCAL fldHandle, err
  268.     fldHandle = String$(2, 0)
  269.     err = PXfldHandle(%%curTblHnd, whichField, fldHandle)
  270.     IF err <> PDX_PXSUCCESS THEN
  271.         RETURN (NOT(%%Error(err)))
  272.     END IF
  273.     whichField = CVI(fldHandle)        
  274.     Return (%%TRUE)
  275. END FUNC
  276.  
  277. FUNC %%GetFieldType (whichField, fieldType)
  278.     LOCAL typeStr, err
  279.     typeStr = String$(5, 0)
  280.     err = PXFldType(%%curTblHnd, whichField, 5, typeStr)
  281.     IF err <> PDX_PXSUCCESS THEN
  282.         RETURN (NOT(%%Error(err)))
  283.     END IF
  284.     fieldType = Left$(typeStr, 1)
  285.     %%curFldType = SubStr$(%%curFldType, "", fieldType, whichField, 1)
  286.     Return (%%TRUE)
  287. END FUNC
  288.  
  289.  
  290. FUNC Search(whichField, what, searchHow)
  291.     LOCAL fieldType, fldHandle, err, tempRecHnd, done
  292.  
  293.     IF QVar(whichField, _Alpha) THEN
  294.         IF NOT(%%GetFieldHandle(whichField)) THEN
  295.             Return (%%FALSE)
  296.         END IF
  297.     END IF
  298.     fieldType = Mid$(%%curFldType, whichField, 1)
  299.     IF fieldType = " " THEN
  300.         IF NOT(%%GetFieldType(whichField, fieldType)) THEN
  301.             Return (%%FALSE)
  302.         END IF
  303.     END IF
  304.  
  305.     tempRecHnd = String$(2, 0)
  306.     err = PXRecBufOpen(%%curTblHnd, tempRecHnd)
  307.     IF err THEN
  308.         RETURN (NOT(%%Error(err)))
  309.     END IF
  310.     tempRecHnd = CVI(tempRecHnd)
  311.  
  312.     SELECT CASE fieldType
  313.     CASE "A"        ' Alpha
  314.         err = PXPutAlpha(tempRecHnd, whichField, what)
  315.     CASE "N", "$"    ' Numeric
  316.         err = PXPutDoub(tempRecHnd, whichField, CVD(what))
  317.     CASE "S"        ' 16 bit number
  318.         err = PXPutShort(tempRecHnd, whichField, CVI(what))
  319.     CASE "D"        ' Date
  320.         dateBuff = String$(4, 0)
  321.         dInfo = DateInfo(what)
  322.         err = PXDateEncode(dInfo[_DI_Month], dInfo[_DI_DayOfMonth], dInfo[_DI_Year], what)
  323.         IF err = PDX_PXSUCCESS THEN
  324.             err = PXPutDate(tempRecHnd, whichField, CVL(dateBuff))
  325.         END IF
  326.     END SELECT
  327.     IF err <> PDX_PXSUCCESS THEN
  328.         RETURN (NOT(%%Error(err)))
  329.     END IF
  330.  
  331.     err = PXSrchFld(%%curTblHnd, tempRecHnd, whichField, searchHow)
  332.     IF NOT err THEN
  333.         done = 1
  334.     ELSE
  335.         IF (err = PDX_PXERR_RECNOTFOUND) THEN
  336.             IF searchHow = PDX_SEARCHFIRST OR searchHow = PDX_SEARCHNEXT THEN
  337.                 %%MBox("Field not found.")
  338.                 done = 2
  339.             ELSE
  340.                 done = 1
  341.             END IF        
  342.         ELSEIF err = PDX_PXERR_ENDOFTABLE AND searchHow = PDX_CLOSESTRECORD THEN
  343.             %%MBox("Field not found.")
  344.             done = 2
  345.         ELSE
  346.             done = 3
  347.         END IF
  348.     END IF
  349.     err = PXRecBufClose(tempRecHnd)
  350.     IF err <> PDX_PXSUCCESS THEN
  351.         done = 3
  352.     END IF
  353.     IF done = 1 THEN
  354.         RETURN (%%TRUE)
  355.     ELSEIF done = 2 THEN
  356.         RETURN (%%FALSE)
  357.     ELSE
  358.         RETURN (NOT(%%Error(err)))
  359.     END IF
  360. END FUNC
  361.  
  362.  
  363.  
  364. FUNC GetRecord
  365.     LOCAL err
  366.     err = PXRecGet(%%curTblHnd, %%curRecHnd)
  367.     IF err <> PDX_PXSUCCESS THEN
  368.         RETURN (NOT(%%Error(err)))
  369.     ELSE 
  370.         RETURN (%%TRUE)
  371.     END IF
  372. END FUNC
  373.  
  374.  
  375. FUNC NewRecord
  376.     LOCAL err
  377.     err = PXRecBufEmpty(%%curRecHnd)
  378.     IF err <> PDX_PXSUCCESS THEN
  379.         RETURN (NOT(%%Error(err)))
  380.     ELSE 
  381.         RETURN (%%TRUE)
  382.     END IF
  383. END FUNC
  384.  
  385.  
  386. FUNC GetField (whichField, buff)
  387.     LOCAL fieldType, pxMonth, pxDay, pxYear, fldHandle, tmpStr, err
  388.  
  389.     IF QVar(whichField, _Alpha) THEN
  390.         IF NOT(%%GetFieldHandle(whichField)) THEN
  391.             Return (%%FALSE)
  392.         END IF
  393.     END IF
  394.     fieldType = Mid$(%%curFldType, whichField, 1)
  395.     IF fieldType = " " THEN
  396.         IF NOT(%%GetFieldType(whichField, fieldType)) THEN
  397.             Return (%%FALSE)
  398.         END IF
  399.     END IF
  400.  
  401.     SELECT CASE fieldType
  402.     CASE "A"            ' Alpha
  403.         tmpStr = String$(255, " ")
  404.         err = PXGetAlpha(%%curRecHnd, whichField, Len(tmpStr), tmpStr)
  405.         IF err = PDX_PXSUCCESS THEN
  406.             buff = Left$(tmpStr, InStr(tmpStr, Chr$(0)) - 1)
  407.         END IF
  408.     CASE "N", "$"        ' Numeric
  409.         tmpStr = String$(8, " ")
  410.         err = PXGetDoub(%%curRecHnd, whichField, tmpStr)
  411.         IF err = PDX_PXSUCCESS THEN
  412.             buff = CVD(tmpStr)
  413.         END IF
  414.     CASE "S"            ' 16 bit number
  415.         tmpStr = String$(2, " ")
  416.         err = PXGetShort(%%curRecHnd, whichField, tmpStr)
  417.         IF err = PDX_PXSUCCESS THEN
  418.             buff = CVI(tmpStr)
  419.         END IF
  420.     CASE "D"            ' Date
  421.         tmpStr = String$(4, " ")
  422.         err = PXGetDate(%%curRecHnd, whichField, tmpStr)
  423.         IF err = pDX_PXSUCCESS THEN
  424.             pxMonth = String$(2, 0)
  425.             pxDay = String$(2, 0)
  426.             pxYear = String$(2, 0)
  427.             err = PXDateDecode(CVL(tmpStr), pxMonth, pxDay, pxYear)
  428.             IF err = PDX_PXSUCCESS THEN
  429.                 pxMonth = CVI(pxMonth)
  430.                 pxDay = CVI(pxDay)
  431.                 pxYear = CVI(pxYear)
  432.                 buff = StrToDate(SPrint("##/##/####", pxMonth, pxDay, pxYear))
  433.             END IF
  434.         END IF
  435.     END SELECT
  436.     IF err = PDX_PXSUCCESS THEN
  437.         RETURN (%%TRUE)
  438.     ELSE
  439.         RETURN (NOT(%%Error(err)))
  440.     END IF
  441. END FUNC
  442.  
  443.  
  444. FUNC PutField (whichField, buff)
  445.     LOCAL fieldType, dateBuff, dInfo, fldHandle, err
  446.  
  447.     IF QVar(whichField, _Alpha) THEN
  448.         IF NOT(%%GetFieldHandle(whichField)) THEN
  449.             Return (%%FALSE)
  450.         END IF
  451.     END IF
  452.     fieldType = Mid$(%%curFldType, whichField, 1)
  453.     IF fieldType = " " THEN
  454.         IF NOT(%%GetFieldType(whichField, fieldType)) THEN
  455.             Return (%%FALSE)
  456.         END IF
  457.     END IF
  458.  
  459.     SELECT CASE fieldType
  460.     CASE "A"            ' Alpha
  461.         err = PXPutAlpha(%%curRecHnd, whichField, buff)
  462.     CASE "N", "$"        ' Numeric
  463.         err = PXPutDoub(%%curRecHnd, whichField, buff)
  464.     CASE "S"            ' 16 bit number
  465.         err = PXPutShort(%%curRecHnd, whichField, buff)
  466.     CASE "D"            ' Date
  467.         dateBuff = String$(4, 0)
  468.         dInfo = DateInfo(buff)
  469.         err = PXDateEncode(dInfo[_DI_Month], dInfo[_DI_DayOfMonth], dInfo[_DI_Year], dateBuff)
  470.         IF err = PDX_PXSUCCESS THEN
  471.             err = PXPutDate(%%curRecHnd, whichField, CVL(dateBuff))
  472.         END IF
  473.     END SELECT
  474.     IF err = PDX_PXSUCCESS THEN
  475.         RETURN (%%TRUE)
  476.     ELSE
  477.         RETURN (NOT(%%Error(err)))
  478.     END IF
  479. END FUNC
  480.  
  481.  
  482. FUNC BlankField (whichField)
  483.     LOCAL err
  484.  
  485.     IF QVar(whichField, _Alpha) THEN
  486.         IF NOT(%%GetFieldHandle(whichField)) THEN
  487.             Return (%%FALSE)
  488.         END IF
  489.     END IF
  490.     err = PXPutBlank(%%curRecHnd, whichField)
  491.     IF err = PDX_PXSUCCESS THEN
  492.         RETURN (%%TRUE)
  493.     ELSE
  494.         RETURN (NOT(%%Error(err)))
  495.     END IF
  496. END FUNC
  497.  
  498.  
  499. FUNC IsBlankField (whichField)
  500.     LOCAL result, err
  501.  
  502.     IF QVar(whichField, _Alpha) THEN
  503.         IF NOT(%%GetFieldHandle(whichField)) THEN
  504.             Return (%%FALSE)
  505.         END IF
  506.     END IF
  507.     err = PXFldBlank(%%curRecHnd, whichField, result)
  508.     IF err = PDX_PXSUCCESS THEN
  509.         RETURN (CVI(result))
  510.     ELSE
  511.         RETURN (NOT(%%Error(err)))
  512.     END IF
  513. END FUNC
  514.  
  515.  
  516. FUNC InsertRecord
  517.     LOCAL err
  518.     err = PXRecInsert(%%curTblHnd, %%curRecHnd)
  519.     IF err = PDX_PXSUCCESS THEN
  520.         RETURN (%%TRUE)
  521.     ELSE
  522.         RETURN (NOT(%%Error(err)))
  523.     END IF
  524. END FUNC
  525.  
  526.  
  527. FUNC UpdateRecord
  528.     LOCAL err
  529.     err = PXRecUpdate(%%curTblHnd, %%curRecHnd)
  530.     IF err = PDX_PXSUCCESS THEN
  531.         RETURN (%%TRUE)
  532.     ELSE
  533.         RETURN (NOT(%%Error(err)))
  534.     END IF    
  535. END FUNC
  536.  
  537.  
  538. FUNC DeleteRecord
  539.     LOCAL err
  540.     err = PXRecDelete(%%curTblHnd)
  541.     IF err = PDX_PXSUCCESS THEN
  542.         RETURN (%%TRUE)
  543.     ELSE
  544.         RETURN (NOT(%%Error(err)))
  545.     END IF
  546. END FUNC
  547.